#ifndef QUEUE_H__
#define QUEUE_H__

// 通用队列结构（支持任意类型）
typedef struct {
    void *data;       // 存储数据的缓冲区（动态分配，按元素大小对齐）
    int head;         // 队头指针（索引）
    int tail;         // 队尾指针（索引）
    int capacity;     // 队列最大容量（元素个数）
    int elem_size;    // 单个元素的大小（字节）
} queue_t;

// 初始化队列：pq=队列指针，capacity=最大元素数，elem_size=单个元素大小
int queue_init(queue_t **pq, int capacity, int elem_size);

// 队列空判断：空返回1，非空返回0
int queue_is_empty(const queue_t *pq);

// 队列满判断：满返回1，非满返回0
int queue_is_full(const queue_t *pq);

// 入队列：data=待入队数据（需与elem_size大小一致），成功返回1，失败返回0
int queue_enq(queue_t *pq, const void *data);

// 出队列：data=接收出队数据的缓冲区（需提前分配elem_size大小空间），成功返回1，失败返回0
int queue_deq(queue_t *pq, void *data);

// 销毁队列：释放所有内存，置空pq
void queue_destory(queue_t **pq);

#endif